#include "OgreUtil.h"
#include "OISHandler.h"


Ogre::Root* OgreUtil::root;
Ogre::Log* OgreUtil::log;
bool OgreUtil::exitAppTriggered;

OgreUtil::OgreUtil() {
}

OgreUtil::~OgreUtil() {
}

//Genera ogreRoot y ogreLog
bool OgreUtil::initializeOgre() {
	// Ficheros de plugins, logging y configuracion
	Ogre::String pluginsCfg = "plugins.cfg";
	Ogre::String ogreLog = "ogre.cfg";
	Ogre::String ogreCfg = "ogre.log";

	// Recupera raiz
	root = new Ogre::Root(pluginsCfg, ogreCfg, ogreLog);

	// Dialogo para configurar Ogre
	if (!root->restoreConfig() && !root->showConfigDialog()) {
		// Recupera logger
		log = Ogre::LogManager::getSingleton().getLog(ogreLog);
		//
		log->logMessage("OgreUtil::initializeOgre(): El usuario ha cancelado el dialogo de configuracion");
		//
		return false;
	}
	//
	return true;
}

Ogre::Root* OgreUtil::getOgreRoot() {
	return root;
}
Ogre::Log* OgreUtil::getOgreLog() {
	return log;
}

Ogre::RenderWindow* OgreUtil::initializeWindow(Ogre::String mWindowsName) {
	Ogre::RenderWindow* mWindow;
	// Inicializamos Ogre y creamos una ventana
	if (root->initialise(true, mWindowsName)) {
		// Tomamos la ventana creada
		mWindow = root->getAutoCreatedWindow();
	} else {
		log->logMessage("MainScene::iniciarOgre(): No se pudo inicializar Ogre");
		return NULL;
	}
	return mWindow;
}

OISHandler* OgreUtil::initializeWindowOIS(Ogre::RenderWindow* pWindow) {
	//Inicializo event handler
	OISHandler* oisHandler = new OISHandler();
	oisHandler->initialize(pWindow);
	// Comenzamos a esperar eventos de ventana
	Ogre::WindowEventUtilities::addWindowEventListener(pWindow, oisHandler);
	return oisHandler;
}


bool OgreUtil::isExitAppTriggered() {
	return exitAppTriggered;
}

void OgreUtil::setExitAppTriggered() {
	exitAppTriggered=true;
}

